#ifndef _PHS_IO_TRANSFER_
#define _PHS_IO_TRANSFER_

#include <linux/kernel.h>
#include <linux/blkdev.h>
#include <linux/spinlock_api_smp.h>
#include "handling.h"
#include "phaseshift.h"

void phs_transfer(struct request *req, struct phs_device *dev, sector_t sector, unsigned long nsect, int write);


/*
 Funkcia na citanie dat, ktore boli zapisane z ineho uzla
 WORKER FUNKCIA
 
 buffer ... pointer na zasobnik, kde zapisem data
 pozicia ... odkial cerpat data (pozicia v RAM kde su data ulozene na uzly v sieti)
 len ... dlzka dat ktore chcem nacitat

 vracia 1 ak funkcia sa vykonala vporiadku
       -1 ak sa nieco pokaslalo
*/
int phs_read_data(char* buffer, u32 *pozicia, u32 len);




/*
 Funkcia na zapis dat, ktore boli prijate z ineho uzla
 WORKER FUNKCIA

 buffer ... pointer na data co chcem zapisat
 len ... dlzka dat, ktore chceme zapisat
 smernik ... pointer/offset ulozenych dat v pamati uzla (pointer si musi zapamatat zdrojovy uzol,
		cielovy uzol len generuje pointer kde to ulozil vo svojej pamati)

 vracia 1 ak funkcia sa vykonala vporiadku
       -1 ak sa nieco pokaslalo
*/
int phs_save_data(char *buffer, u32 len, u32 *smernik);




/*
 Funkcia na potvrdenie pre kernel, ze data boli nacitane + sprostredkovanie zo siete
 DISKIO FUNKCIA

 req ... pointer na IO operaciu z kernelu, ktora to potrebuje
 ackBit ... potvrdenie o vysledku operacie (0 zbehlo, zaporne hodnoty FAIL)
 buffer ... pointer na nacitane data zo siete

 vracia 1 ak funkcia sa vykonala vporiadku
       -1 ak sa nieco pokaslalo
*/
int phs_ack_read_request(struct request *req, int ackBit, char *buffer, u32 nBytes);




/*
 Funkcia na potvrdenie pre kernel, ze data boli zapisane

 req ... pointer na IO operaciu, z kernelu, ktora to potrebuje
 ackBit ... potvrdenie o vysledku operacie (0 zbehlo, zaparne hodnoty FAIL)

 vracia 1 ak funkcia sa vykonala vporiadku
       -1 ak sa nieco pokaslalo
*/
int phs_ack_write_request(struct request *req, int ackBit);




#endif
